package com.im.util;

public class LatLongCalculation {
	private final static double EARTH_RADIUS = 6378.137;
	
	private static double rad(double d)
	{
	    return d * Math.PI / 180.0;
	}
	
	/**
	 * 计算两个经纬度之间的距离
	 * @param lat1
	 * @param lng1
	 * @param lat2
	 * @param lng2
	 * @return
	 */
	public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
	{
	    double radLat1 = rad(lat1);
	    double radLat2 = rad(lat2);
	    double a = radLat1 - radLat2;
	    double b = rad(lng1) - rad(lng2);
	  //距离d = arc cos((sin北纬A×sin北纬B)＋(cos北纬A×cos北纬B×cosAB两地经度差))×地球平均半径  其中地球平均半径为6371.004 km，d的单位为km
	    double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
	    s = s * EARTH_RADIUS;
	    s = Math.round(s * 10000) / 10000;
	    return s;
	}
	
	/**
	 * 
	 */
	
	public static double GetLatLong(double lat1, double lng1,double s)
	{
		double lat2 = 0.0; 
		double lng2 = 0.0; 
	    double radLat1 = rad(lat1);
	    double radLat2 = rad(lat2);
	    double a = radLat1 - radLat2;
	    double b = rad(lng1) - rad(lng2);
	    s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
	    s = s * EARTH_RADIUS;
	    s = Math.round(s * 10000) / 10000;
	    return s;
	}
	
	/**
	 * 同一经度上距离
	 * @param lat1
	 * @param s
	 * @return
	 */
	public static double GetLat(double lat1,double s)
	{
		//纬度差*111km
		double lat2 =  lat1 - s/111;
	    return lat2;
	}
	
	/**
	 * 同一纬度上两点距离
	 * @param lng1
	 * @param s
	 * @return
	 */
	public static double GetLng(double lat1,double lng1,double s)
	{
//		经度差*111km* cos纬度
		double lng2 =(s/111)/ Math.cos(lat1) + lng1;
	    return lng2;
	}
	
}
